﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crosland.Automotriz.Entidad;
using System.Data.SqlClient;

namespace Crosland.Automotriz.Data.Dao.Linq
{
    public class clsT_VEN_OFERTA_CABDAO
    {
        private DM_CROSLAND_20130417Entities ContextoDeObjs = new DM_CROSLAND_20130417Entities();

        public List<T_VEN_OFERTA_CAB_LISTAR> Listar(int ID_ORG_VTA, int ID_OFI_VTA, int ID_CANAL, int ID_TIPO_OFERTA, string DES_LARGA, bool IND_ACTIVO)
        {
            var p = new object[] { new SqlParameter("@ID_ORG_VTA", ID_ORG_VTA), new SqlParameter("@ID_OFI_VTA", ID_OFI_VTA), new SqlParameter("@ID_CANAL", ID_CANAL), new SqlParameter("@ID_TIPO_OFERTA", ID_TIPO_OFERTA), new SqlParameter("@DES_LARGA", DES_LARGA), new SqlParameter("@IND_ACTIVO", IND_ACTIVO) };
            var resultado = ContextoDeObjs.ExecuteStoreQuery<T_VEN_OFERTA_CAB_LISTAR>("exec USP_OFERTA_LISTAR @ID_ORG_VTA,@ID_OFI_VTA,@ID_CANAL,@ID_TIPO_OFERTA,@DES_LARGA,@IND_ACTIVO", p).AsQueryable().ToList();
            return resultado;
        }

        public List<T_VEN_OFERTA_CAB> Seleccionar(int ID_VEN_OFERTA_CAB) 
        {
            var p = new object[] { new SqlParameter("@ID_VEN_OFERTA_CAB", ID_VEN_OFERTA_CAB) };
            var resultado = ContextoDeObjs.ExecuteStoreQuery<T_VEN_OFERTA_CAB>("exec USP_OFERTA_CAB_SELECT @ID_VEN_OFERTA_CAB", p).AsQueryable().ToList();
            return resultado;
        }

        public List<T_VEN_OFERTA_EMAIL> SeleccionarEmail(int ID_VEN_OFERTA_CAB)
        {
            var p = new object[] { new SqlParameter("@ID_VEN_OFERTA_CAB", ID_VEN_OFERTA_CAB) };
            var resultado = ContextoDeObjs.ExecuteStoreQuery<T_VEN_OFERTA_EMAIL>("exec USP_OFERTA_CAB_SELECT_EMAIL @ID_VEN_OFERTA_CAB", p).AsQueryable().ToList();
            return resultado;
        }

        public List<T_VEN_OFERTA_CAB_COMPLETO> SeleccionarCompleto(int ID_VEN_OFERTA_CAB)
        {
            var p = new object[] { new SqlParameter("@ID_VEN_OFERTA_CAB", ID_VEN_OFERTA_CAB) };
            var resultado = ContextoDeObjs.ExecuteStoreQuery<T_VEN_OFERTA_CAB_COMPLETO>("exec USP_OFERTA_CAB_SELECT_COMPLETO @ID_VEN_OFERTA_CAB", p).AsQueryable().ToList();
            return resultado;
        }


        public int ObtenerUltimoID()
        {
            try
            {
                var resultado = ContextoDeObjs.T_VEN_OFERTA_CAB.Select(a => a.ID_VEN_OFERTA_CAB).Max();
                return int.Parse(resultado.ToString());
            }
            catch (Exception)
            {
                return 0;
            }
        }

        public bool Insertar(T_VEN_OFERTA_CAB Obj)
        {
            try
            {
                var p = new object[] { 
                    new SqlParameter("@ID_VEN_OFERTA_CAB", Obj.ID_VEN_OFERTA_CAB), 
                    new SqlParameter("@ID_ORG_VTA", Obj.ID_ORG_VTA), 
                    new SqlParameter("@ID_OFI_VTA", Obj.ID_OFI_VTA), 
                    new SqlParameter("@ID_CANAL", Obj.ID_CANAL),
                    new SqlParameter("@ID_TIPO_OFERTA", Obj.ID_TIPO_OFERTA),
                    new SqlParameter("@FEC_INICIO", Obj.FEC_INICIO),
                    new SqlParameter("@FEC_FIN", Obj.FEC_FIN),
                    new SqlParameter("@ID_USUARIO_REGISTRO", Obj.ID_USUARIO_REGISTRO)
                };
                int resultado = ContextoDeObjs.ExecuteStoreCommand("exec USP_OFERTA_CAB_INSERTAR @ID_VEN_OFERTA_CAB,@ID_ORG_VTA,@ID_OFI_VTA,@ID_CANAL,@ID_TIPO_OFERTA,@FEC_INICIO,@FEC_FIN,@ID_USUARIO_REGISTRO", p);

                if (resultado == 1)
                    return true;
                else
                    return false;
            }
            catch (Exception)
            {
                return false;
            }
        }

        public bool Actualizar(T_VEN_OFERTA_CAB Obj)
        {
            try
            {
                var p = new object[] { 
                    new SqlParameter("@ID_VEN_OFERTA_CAB", Obj.ID_VEN_OFERTA_CAB), 
                    new SqlParameter("@ID_ORG_VTA", Obj.ID_ORG_VTA), 
                    new SqlParameter("@ID_OFI_VTA", Obj.ID_OFI_VTA), 
                    new SqlParameter("@ID_CANAL", Obj.ID_CANAL),
                    new SqlParameter("@ID_TIPO_OFERTA", Obj.ID_TIPO_OFERTA),
                    new SqlParameter("@FEC_INICIO", Obj.FEC_INICIO),
                    new SqlParameter("@FEC_FIN", Obj.FEC_FIN)
                };
                int resultado = ContextoDeObjs.ExecuteStoreCommand("exec USP_OFERTA_CAB_Actualizar @ID_VEN_OFERTA_CAB,@ID_ORG_VTA,@ID_OFI_VTA,@ID_CANAL,@ID_TIPO_OFERTA,@FEC_INICIO,@FEC_FIN", p);

                if (resultado == 1)
                    return true;
                else
                    return false;
            }
            catch (Exception)
            {
                return false;
            }
        }

        public bool Anular(int ID_VEN_OFERTA_CAB)
        {
            try
            {
                var p = new object[] { new SqlParameter("@ID_VEN_OFERTA_CAB", ID_VEN_OFERTA_CAB) };
                int resultado = ContextoDeObjs.ExecuteStoreCommand("exec USP_OFERTA_CAB_ANULAR @ID_VEN_OFERTA_CAB", p);

                if (resultado == 1)
                    return true;
                else
                    return false;
            }
            catch (Exception)
            {
                return false;
            }
        }

        public int ActualizarPendienteDeAprobar(int ID_VEN_OFERTA_CAB, string ID_USUARIO_APROBACION) 
        {
            using (DM_CROSLAND_20130417Entities ctx = new DM_CROSLAND_20130417Entities())
            {
                var stud = (from s in ctx.T_VEN_OFERTA_CAB
                            where s.ID_VEN_OFERTA_CAB == ID_VEN_OFERTA_CAB
                            select s).FirstOrDefault();

                stud.FEC_APROBACION = DateTime.Now;
                stud.ID_USUARIO_APROBACION = ID_USUARIO_APROBACION;
                stud.ID_ESTADO = 41;//Pendiente de Aprobar

                int num = ctx.SaveChanges();
                return num;
            }
        }

        public int ActualizarAprobado(int ID_VEN_OFERTA_CAB, string ID_USUARIO_APROBACION)
        {
            using (DM_CROSLAND_20130417Entities ctx = new DM_CROSLAND_20130417Entities())
            {
                var stud = (from s in ctx.T_VEN_OFERTA_CAB
                            where s.ID_VEN_OFERTA_CAB == ID_VEN_OFERTA_CAB
                            select s).FirstOrDefault();

                stud.FEC_APROBACION = DateTime.Now;
                stud.ID_USUARIO_APROBACION = ID_USUARIO_APROBACION;
                stud.ID_ESTADO = 42;//Aprobado

                int num = ctx.SaveChanges();
                return num;
            }
        }

        public int ActualizarRechazado(int ID_VEN_OFERTA_CAB, string ID_USUARIO_APROBACION)
        {
            using (DM_CROSLAND_20130417Entities ctx = new DM_CROSLAND_20130417Entities())
            {
                var stud = (from s in ctx.T_VEN_OFERTA_CAB
                            where s.ID_VEN_OFERTA_CAB == ID_VEN_OFERTA_CAB
                            select s).FirstOrDefault();

                stud.FEC_APROBACION = DateTime.Now;
                stud.ID_USUARIO_APROBACION = ID_USUARIO_APROBACION;
                stud.ID_ESTADO = 43;//Rechazado

                int num = ctx.SaveChanges();
                return num;
            }
        }

        public List<TD_MATERIAL_OFERTA> ListarOferta(string COD_MATERIAL)
        {
            var p = new object[] { new SqlParameter("@COD_MATERIAL", COD_MATERIAL) };
            var resultado = ContextoDeObjs.ExecuteStoreQuery<TD_MATERIAL_OFERTA>("exec USP_Material_Detalle_Oferta_Select @COD_MATERIAL", p).AsQueryable().ToList();
            return resultado;
        }
    }
}
